home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / art&graf.ix / art-6205 / morphing / util / g_sprl.lst next >
File List  |  1996-11-16  |  3KB  |  136 lines

  1. ' **************************************
  2. ' **  Calcul de grille déformé
  3. ' **  Grille circulaire et sprirale
  4. ' **  GFA Basic
  5. ' **
  6. ' **  Valvassori Moïse 14.10.96
  7. ' **************************************
  8. '
  9. w=319   ! taille de la grille
  10. h=199
  11. c=20   ! nombre de ligne marge comprise
  12. l=20
  13. nom_grille$="GRILLE.GRD"
  14. DIM gx%(c,l),gy%(c,l)   ! grille d'arrivé
  15. DIM gx1%(c,l),gy1%(c,l) ! grille de départ
  16. init
  17. trace
  18. calcul
  19. verif
  20. trace
  21. sauve
  22. PROCEDURE calcul1
  23.   ' Une première méthode de calcul
  24.   LOCAL x,y
  25.   FOR x=0 TO c-1
  26.     FOR y=0 TO l-1
  27.       IF x<>0 AND x<>c-1        ! on déforme pas les bords
  28.         gx%(x,y)=gx%(x,y)+50*(COS(y*(1*PI)/l-1)*SIN(x*(2.5*PI)/(c-1)))
  29.       ENDIF
  30.       IF y<>0 AND y<>l-1        ! on déforme pas les bords
  31.         gy%(x,y)=gy%(x,y)+50*(COS(x*(3*PI)/(c-1))*SIN(y*PI/(l-1)))
  32.       ENDIF
  33.     NEXT y
  34.   NEXT x
  35. RETURN
  36. PROCEDURE calcul
  37.   LOCAL k,y,x,d,cos,sin,pi180,a,an
  38.   k=1*360
  39.   pi180=180/PI
  40.   FOR y=0 TO l-1
  41.     FOR x=0 TO c-1
  42.       d=SQR(((w/2)-gx%(x,y))^2+((h/2)-gy%(x,y))^2)
  43.       IF d<>0
  44.         cos=(gx%(x,y)-(w/2))/d
  45.         sin=(gy%(x,y)-(h/2))/d
  46.         IF sin>0
  47.           an=ACOS(cos)*pi180
  48.         ELSE
  49.           an=-ACOS(cos)*pi180
  50.         ENDIF
  51.         a=an-(1-(d/(100)))*k
  52.         '       a=an+(SINQ(d/l*360))*k
  53.         '      a=an+RND*((d/l)*k)-k/2
  54.       ELSE
  55.         a=0
  56.       ENDIF
  57.       gx%(x,y)=(w/2)+d*COSQ(a)
  58.       gy%(x,y)=(h/2)+d*SINQ(a)
  59.     NEXT x
  60.   NEXT y
  61. RETURN
  62. > PROCEDURE init
  63.   LOCAL r,t
  64.   FOR t=0 TO c-1
  65.     FOR r=0 TO l-1
  66.       gx%(t,r)=w/2+((h/2)/(l-1)*r)*COSQ(360/(c-1)*t)
  67.       gy%(t,r)=h/2+((h/2)/(l-1)*r)*SINQ(360/(c-1)*t)
  68.       gx1%(t,r)=gx%(t,r)
  69.       gy1%(t,r)=gy%(t,r)
  70.     NEXT r
  71.   NEXT t
  72. RETURN
  73. > PROCEDURE trace
  74.   ' trace que la grille d'arrivé
  75.   LOCAL x,y
  76.   CLS
  77.   FOR x=0 TO c-1
  78.     FOR y=0 TO l-1
  79.       IF x<>c-1
  80.         COLOR (y MOD 15)+1
  81.         DRAW gx%(x,y),gy%(x,y) TO gx%(x+1,y),gy%(x+1,y)
  82.       ENDIF
  83.       IF y<>l-1
  84.         COLOR (x MOD 15)+1
  85.         DRAW gx%(x,y),gy%(x,y) TO gx%(x,y+1),gy%(x,y+1)
  86.       ENDIF
  87.     NEXT y
  88.   NEXT x
  89. RETURN
  90. > PROCEDURE verif
  91.   ' Vérifie si l'on est pas sortie du cadre
  92.   LOCAL x,y
  93.   FOR x=0 TO c-1
  94.     FOR y=0 TO l-1
  95.       IF gx%(x,y)<1     ! gère le bug du bord gauche de la grille
  96.         gx%(x,y)=1
  97.       ENDIF
  98.       IF gy%(x,y)<0
  99.         gy%(x,y)=0
  100.       ENDIF
  101.       IF gx%(x,y)>w+1   ! bug du bors gauche
  102.         gx%(x,y)=w+1
  103.       ENDIF
  104.       IF gy%(x,y)>h
  105.         gy%(x,y)=h
  106.       ENDIF
  107.     NEXT y
  108.   NEXT x
  109. RETURN
  110. > PROCEDURE sauve
  111.   LOCAL x,y
  112.   OPEN "o",#1,nom_grille$      ! nom du fichier
  113.   ' header
  114.   PRINT #1;"MORPHING GRID";CHR$(0);     ! type de fichier
  115.   PRINT #1;MKI$(&H100);                 ! version 1.00
  116.   ' GRILLE grid 0
  117.   PRINT #1;MKI$(c-1);MKI$(l-1);MKI$(gx1%(0,0));MKI$(gy1%(0,0)); ! nb de colone,nb de ligne, coin haut et gauche
  118.   PRINT #1;MKI$(gx1%(c-1,l-1));MKI$(gy1%(c-1,l-1));"dumy";      ! coin bas et droit, pointeur sur la grille (dummy)
  119.   ' GRILLE grid 1
  120.   PRINT #1;MKI$(c-1);MKI$(l-1);MKI$(gx%(0,0));MKI$(gy%(0,0));
  121.   PRINT #1;MKI$(gx%(c-1,l-1));MKI$(gy%(c-1,l-1));"dumy";
  122.   ' data grid 0
  123.   FOR y=0 TO l-1
  124.     FOR x=0 TO c-1
  125.       PRINT #1;MKI$(gx1%(x,y));MKI$(gy1%(x,y)); ! les données de la grille
  126.     NEXT x
  127.   NEXT y
  128.   ' data grid 1
  129.   FOR y=0 TO l-1
  130.     FOR x=0 TO c-1
  131.       PRINT #1;MKI$(gx%(x,y));MKI$(gy%(x,y));
  132.     NEXT x
  133.   NEXT y
  134.   CLOSE #1
  135. RETURN
  136.